package com.example.android_entrainement;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
 * Created by jim on 20/07/13.
 */
public class CardEntityManager {

    private static final int VERSION_BDD = 1;
    private static final String NOM_BDD = "HoW.db";

    private static final String CARDS_TABLE = "CardsTable";
    private static final String COL_ID = "ID";
    private static final int NUM_COL_ID = 0;
    private static final String COL_CARD_NAME = "Name";
    private static final int NUM_COL_NAME = 1;
    private static final String COL_CARD_RARITY = "Rarity";
    private static final int NUM_COL_CARD_RARITY = 2;
    private static final String COL_CARD_CAPA = "Capacity";
    private static final int NUM_COL_CARD_CAPA = 3;
    private static final String COL_IMG_PATH = "ImageResPath";
    private static final int NUM_COL_IMG_PATH = 4;

    private SQLiteDatabase bdd;

    private HearthstoneSQLiteDB howSQLite;

    public CardEntityManager(Context context){
        //On créer la BDD et sa table
        howSQLite = new HearthstoneSQLiteDB(context, NOM_BDD, null, VERSION_BDD);
    }

    public void open(){
        //on ouvre la BDD en écriture
        bdd = howSQLite.getWritableDatabase();
    }

    public void close(){
        //on ferme l'accès à la BDD
        bdd.close();
    }

    public SQLiteDatabase getBDD(){
        return bdd;
    }

    public void DeleteBDD()
    {
        howSQLite.onUpgrade(bdd,0,0);
    }

    public long insertCard(CardEntity card){
        //Création d'un ContentValues (fonctionne comme une HashMap)
        ContentValues values = new ContentValues();
        //on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
        values.put(COL_CARD_NAME,card.getName());
        values.put(COL_CARD_RARITY,card.getRarity());
        values.put(COL_CARD_CAPA,card.getCapacity());
        values.put(COL_IMG_PATH,card.getImageResPath());
        //on insère l'objet dans la BDD via le ContentValues
        return bdd.insert(CARDS_TABLE, null, values);
    }

    public int updateCard(int id, CardEntity card){
        //La mise à jour d'un livre dans la BDD fonctionne plus ou moins comme une insertion
        //il faut simple préciser quelle livre on doit mettre à jour grâce à l'ID
        ContentValues values = new ContentValues();
        values.put(COL_CARD_NAME,card.getName());
        values.put(COL_CARD_RARITY,card.getRarity());
        values.put(COL_CARD_CAPA,card.getCapacity());
        values.put(COL_IMG_PATH,card.getImageResPath());
        return bdd.update(CARDS_TABLE, values, COL_ID + " = " +id, null);
    }

    public int removeCardWithID(int id){
        //Suppression d'un livre de la BDD grâce à l'ID
        return bdd.delete(CARDS_TABLE, COL_ID + " = " +id, null);
    }

    public CardEntity getCardWithName(String name){
        //Récupère dans un Cursor les valeur correspondant à un livre contenu dans la BDD (ici on sélectionne le livre grâce à son titre)
        Cursor c = bdd.query(CARDS_TABLE, new String[] {COL_ID, COL_CARD_NAME, COL_CARD_RARITY,COL_CARD_CAPA,COL_IMG_PATH}, COL_CARD_NAME + " LIKE \"" + name +"\"", null, null, null, null);
        return cursorToCard(c);
    }

    //Cette méthode permet de convertir un cursor en un livre
    private CardEntity cursorToCard(Cursor c){
        //si aucun élément n'a été retourné dans la requête, on renvoie null
        if (c.getCount() == 0)
            return null;

        //Sinon on se place sur le premier élément
        c.moveToFirst();
        //On créé un livre
        CardEntity card = new CardEntity();
        //on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
        card.setid(c.getInt(NUM_COL_ID));
        card.setName(c.getString(NUM_COL_NAME));
        card.setRarity(c.getString(NUM_COL_CARD_RARITY));
        card.setCapacity(c.getString(NUM_COL_CARD_CAPA));
        card.setCapacity(c.getString(NUM_COL_IMG_PATH));
        //On ferme le cursor
        c.close();

        //On retourne le livre
        return card;
    }

     public void FillDBwithAssets()
     {


     }


}
